package day0328;

import javax.swing.*;
import java.util.ArrayList;

public class Yang2 {
    public static void main(String[] args) {
        //一、创建四个组件
        JFrame win=new JFrame();//1.窗口(相框)
        JPanel pane=new JPanel();//2.面板(相框后的木板)
        JLabel jla=new JLabel();//3.标签(塑封纸)
        ImageIcon bgImg=new ImageIcon("img/背景.jpg");//4.图片(照片)
        pane.setLayout(null);//可以让背景图和按钮叠加显示(举例：将背景图设置到0，0坐标处(宽480，高800)，  将按钮设置到10，10)
        //给面板设置布局方式为null(取消默认的排版方式<从左到右排版从上到下排版的>)，每个组件只能通过坐标和宽高来设置样式位置和大小)



        jla.setLocation(0,0);//jla设置位置，设置宽高
        jla.setSize(480,800);
        //二、叠加三次(将四个组件叠加起来)
        jla.setIcon(bgImg);//1.给标签jla中放入图片bgImg(将照片塑封)
        pane.add(jla);//2.将标签放到面板中(将塑封好的照片放到木板上, 木板最后要放到相框中)

        ArrayList<JButton>  buttons=createButtons();//调用createButtons()返回144个按钮
        //将按钮放到面板Pane中(写在"放入背景图代码"的下边)
        //先放图片到面板中，  再放按钮到面板中(按这样的顺序才能将按钮放到图片上边)
        putBtnsToPane(buttons,pane,49,0,7,30,100);//将144个按钮buttons放到面板pane中
        //putBtnsToPane(buttons,pane,36,49,6,60,130);//将144个按钮buttons放到面板pane中

        win.add(pane);//3.将面板放到窗口中(将放了照片的木板放到相框后边)

        //三、设置窗口的属性(居中， 能被关闭，禁用修改大小， 设置窗口显示)
        win.setSize(480,800);
        win.setLocationRelativeTo(null);
        //win.setResizable(false);
        win.setVisible(true);
    }

    //1.buttons集合中的144个按钮，放到面板pange中。
    //2.count表示这一层放多少个按钮(putBtnsToPane()执行一次就放一层按钮)。
    //3.offset表示这一层的第一个按钮是这144个按钮中的第几个。
    //4.cols表示这一层按钮有几列。
    //5.int x和int y 表示这一层第一个按钮的左上角坐标.
    //从buttons集合中取出每个按钮，放到pane面板上
    //用for循环从buttons集合中取出一个按钮，放到pane面板上
    private static void putBtnsToPane(ArrayList<JButton> buttons, JPanel pane,
                                      int count, int offset, int cols, int x, int y) {
        //1.定义for循环执行144次
        for (int i = 0; i < count; i++) {
            JButton b=buttons.get(i);// 1.1.循环中从buttons集合中用buttons.get(i)取出一个按钮
            b.setSize(59,66);// 1.2.调用按钮b的setSize(59,66)方法设置宽高
            b.setLocation(x+i%cols*59,y+i/cols*60);//  调用按钮b的setLocation(59,66)方法设置坐标
            //b.setLocation(x+i%7*59,y+i/7*60);//  调用按钮b的setLocation(59,66)方法设置坐标
            //30+i%cols*59,100+i/cols*60
            pane.add(b,0);// 1.3.给面板pane中中添加按钮b
        }//pane.add(b,0)中的0表示：   按钮b处于面板pane的第0层(最顶层)
    }


    //用一个createButtons方法创建144个按钮
    public static ArrayList<JButton> createButtons(){
        //1.用一个ArrayList来存储144个按钮比数组更方便(存元素的代码都写好了，只需要调用).
        ArrayList<JButton> btns=new ArrayList<JButton>();//定义一个ArrayList，存储144个按钮
        //2.for放入144个按钮(16个按钮用9遍)
        String[] names = {"刷子","剪刀","南瓜","奶瓶","干草", //names数组存储16个图片的名字。
                          "手套","树桩","兔子","毛线","水桶",
                          "树", "苹果","白菜", "草", "萝卜","铃铛"};
        for (int i = 0; i < 9; i++) {//将16个图片使用9次  (总共使用16*9个图片)
            for (int j = 0; j < names.length; j++) {
                String imgName=names[j];
                //用imgName和"img"以及".jpg"拼接路径 来创建 JButton(放入到btns集合中)
                JButton b=new JButton();//创建按钮
                ImageIcon btnImgBg=new ImageIcon("img/" +imgName +".png");//创建图片
                b.setIcon(btnImgBg);//按钮中包含图片
                btns.add(b);
            }
        }
        //3.返回btns集合(集合中存储了144个按钮)
        return btns;
    }

}
//完成后就休息



















